package main

import (
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
	"log"
	"net/http"
	"strings"
)

// Body Limit 中间件用于设置请求体的最大长度，如果请求体的大小超过了限制值，则返回 "413 － Request Entity Too Large" 响应。
// 该限制的判断是根据 Content-Length 请求标头和实际内容确定的，这使其尽可能的保证安全。
//
// 限制可以指定 4x 或者 4xB，x是 "K, M, G, T, P" 计算机单位的倍数之一。
func main() {

	e := echo.New()
	//用法一
	//e.Use(middleware.BodyLimit("1M"))

	//用法二：自定义BodyLimitConfig （推荐）
	e.Use(middleware.BodyLimitWithConfig(CustomBodyLimitConfig()))

	e.GET("/index", Index)
	e.POST("/body", Body)

	e.Start(":80")
}

// CustomBodyLimitConfig
//
//	@Description: 自定义BodyLimitConfig
//	@return middleware.BodyLimitConfig
//	超过限制：
//
// {
// "message": "Request Entity Too Large"
// }
func CustomBodyLimitConfig() middleware.BodyLimitConfig {
	return middleware.BodyLimitConfig{
		Skipper: func(c echo.Context) bool {
			uri := c.Request().RequestURI
			if strings.Contains(uri, "/index") {
				log.Println("uri:", uri, "--->>>Skipper-true")
				return true
			}
			log.Println("uri:", uri, "--->>>Skipper-false")
			return false
		},
		Limit: "0.1KIB",
	}
}

func Index(c echo.Context) error {
	return c.String(http.StatusOK, "index success!")
}

func Body(c echo.Context) error {
	return c.String(http.StatusOK, "body success!")
}
